package co.kr.caja.transversal;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DAOFactorySqlServer {

	private Connection conexion;

	public DAOFactorySqlServer() {
		super();
		conexion = null;
		abrirConexion();
	}

	private Boolean conexionAbierta() throws SQLException {
		return (conexion != null && conexion.isClosed() == false);
	}

	public void iniciarTransaccion() {
		try {
			if (conexionAbierta()) {
				conexion.setAutoCommit(Boolean.FALSE);
			}
		} catch (SQLException excepcion) {
			excepcion.printStackTrace();
		}
	}

	private void abrirConexion() {
		try {
			final Context contexto = (Context) (new InitialContext()).lookup("java:comp/env");
			final DataSource dataSource = (DataSource) contexto.lookup("jdbc/dataSourceSQLServerAplicacion");
			conexion = dataSource.getConnection();
			iniciarTransaccion();
		} catch (final SQLException excepcion) {
			excepcion.printStackTrace();
		} catch (final Exception excepcion) {
			excepcion.printStackTrace();
		}
	}

	public void confirmarTransaccion() {
		try {
			if (conexionAbierta()) {
				conexion.commit();
			}
		} catch (SQLException excepcion) {
			excepcion.printStackTrace();
		}
	}

	public void cancelarTransaccion() {
		try {
			if (conexionAbierta()) {
				conexion.rollback();
			}
		} catch (SQLException excepcion) {
			excepcion.printStackTrace();
		}
	}

	public void cerrarConexion() {
		try {
			if (conexionAbierta()) {
				conexion.close();
			}
		} catch (SQLException excepcion) {
			excepcion.printStackTrace();
		}
	}

	public Connection obtenerConexion() {
		return conexion;
	}
}
